<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	<body>
		<script type="text/javascript">
			/* 1、编写计算加减乘除的4个函数，用return语句返回计算结果。
			add     加
			subtract   减
			multiply   乘
			division   除 */

			/* var a = 1,b = 2;
			function add(a,b){
				return a + b;
			}
			var result = add(a,b);
			console.log(result); */


			/* var a = 1,b = 2;
			function subtract(a,b){
				return a - b;
			}
			var result = subtract(a,b);
			console.log(result); */


			/* var a = 0,b = 2;
			function multiply(a,b){
				return a * b;
			}
			var result = multiply(a,b);
			console.log(result);
			 */

			/* var a = 1,b = 2;
			function division (a,b){
				if(!b){
					return "0不可做分母";
				}else{
					return a / b;
				}
			}
			var result = division(a,b);
			console.log(result); */
			//2、定义一个可以接受三个number参数的函数，返回这三个数中最大的那个值，调用此方法。	
			//枚举法
			/* var a = 1,b = 5,c = 0; //eg
			function max(a,b,c){
				if(a >= b && a >= c){
					return a;
				}
				if(b >= a && b >= c){
					return b;
				}
				if(c >= a && c >= b){
					return c;
				}
			}
			var result = max(a,b,c);
			console.log(result);//5 */

			//定义中间变量 定义最大值
			/* 
			var a = 1,b = 5,c = 0;
			var max = 0;
			function maxF(a,b,c){
				if(a >= max){
					max = a;
				}
				if(b >= max){
					max = b;
				}
				if(c >= max){
					max = c;
				}
				return max;
			}
			var result = maxF(a,b,c);
			console.log(result); //5 */

			/* 1、编写一个收银台收银程序，根据商品单价、购买数量以及收款金额计算并输出应收金额和找零；当总价大于或等于500时，享受8折优惠
			考虑程序异常情况，如：
			若收款金额大于应收金额，则计算找零后输出
			若收款金额小于应收金额，输出错误提示信息 */

			/* console.log(fn(9.99,1000,10000));
			fgx(); */
			console.log(fn(9.99, 1, 10));

			function fn(price, num, price0) {
				var total = price * num;
				if (total >= 500) {
					total = (total * 0.8).toFixed(2);
				}
				if (price0 < total) {
					return "不够支付";
				} else {
					//console.log("total:",total,(price0-total).toFixed(2));
					return "找零:" + ((price0 - total).toFixed(2)) + "元";
				}
			}


			//2、用递归函数实现1-100之内所有数之和
			/* function fn(num){
				if(num == 1){
					return 1;
				}
				return num + fn(num - 1);
			}
			var result = fn(100)
			console.log(result); //5050 */

			//3、 写出1-2+3-4+5-6+7......+n的几种实现函数
			var n = 20;

			function fn3(n) {
				if (n <= 0) {
					console.log("error: n must > 0");
					exit(1);
				}
				if (n % 2 == 0) {
					return (n / 2) * (-1);
				} else {
					return (n / 2) * (-1) + n;
				}
			}
			var result = fn3(n);
			console.log(result);

			/* long fn(long n)
			{
			    if(n<=0)
			  {
			      printf("error: n must > 0);
			      exit(1);
			    }
			  if(0==n%2)
			  return (n/2)*(-1);
			  else
			  return (n/2)*(-1)+n;
			} */


			//4.求1-100以内的质数

			function Prime1ToN(n) {
				var arr = [];
				for (var i = 2; i <= n; i++) {
					if (isPrime(i)) {
						arr.push(i);
					};
				}
				return arr;
			}
			console.log("1-100之间的质数:", Prime1ToN(100));

			function isPrime(n) {
				var f = true;
				for (var i = 2; i < n; i++) {
					if (n % i == 0) {
						f = false;
						break;
					}
				}
				return f;
			}


			//5.求n!的值
			/* var n = 4;  //eg n = 4;
			function fn(n){
				if(n == 1){
					return 1;
				}
				return n * fn(n - 1);
			}
			var result = fn(n); 
			console.log(result); */

			//6.求 1!+2!+3!+...+n!;
			/* function fnSum(n){
				var sum=0;
				for(var i=1;i<=n;i++){
					sum+=fn2(i);
				}
				return sum;
				
			}
			console.log("fnSum(4):",fnSum(3));
			function fn2(n){
				if(n==1){
					return 1;
				}else{
					return n*arguments.callee(n-1);
				}
			} */

			//答案用了回调函数 把阶乘的函数返回值作为参数代入求阶乘和的函数里

			/* 1、数组 - 求平均分
			已知本班考试分数：var scores=[67,98,43,100,66,73];
			       求本次考试的平均分数、最高分、最低分。 */
			/*  var sum = 0;
			   var scores=[67,98,43,100,66,73];
			   for (var i = 0; i < scores.length; i++) {
					sum += scores[i];
			   }
			   console.log("平均分"+sum/scores.length); //74.5
			   
			   var min = 0,max = 0;
			   for (var j = 0; j < scores.length; j++) {
					if(scores[max] < scores[j]){
						max = j;
					}
					if(scores[min] > scores[j]){
						min = j;
					}
			   }
			   console.log("最高分："+scores[max],"最低分："+scores[min]);//最高分：100 最低分：43 */


			/* 2、数组 - 去掉重复元素
			现有一个数组var array=[1,1,2,3,4,2,3,6,8,9,9,6];编写一个函数，传入该数组，在函数中去掉数组中的重复元素，并生成新的数组返回。
			function noRepeat(arr){
			}
			var newArray=noRepeat(array);
			//newArray=[1,2,3,4,6,8,9];
			//请实现函数noRepeat(arr) */
			/* var array=[1,1,2,3,4,2,3,6,8,9,9,6]
				function noRepeat(array){
					var newArray = [];
					for (var i = 0; i < array.length; i++) {
						if(newArray.indexOf(array[i]) == -1){
							newArray.push(array[i]);
						}
					}
					return newArray;
				}
				var newArray=noRepeat(array);
				console.log(newArray); // [1, 2, 3, 4, 6, 8, 9]
		 */

			/* 3、数组 - 冒泡排序
			尝试编写冒泡排序法。 */
			/* 	var arr=[1,1,2,3,4,2,3,6,8,9,9,6];
				function bubleSort(arr){
					for(var i=0,len=arr.length;i<len;i++){
						for(var j=i+1;j<len;j++){
							var tmp=0;
							if(arr[i]>arr[j]){
								tmp=arr[j];
								arr[j]=arr[i];
								arr[i]=tmp;
							}
						}
					}
					return arr;
				}
				console.log("冒泡排序:",bubleSort(arr))
 */
			var arr = [1,1,3,3,2,2,0];
			for (var i = 0; i < arr.length; i++) {
				for (var j = i + 1; j < arr.length; j++) {
					var tmp;
					if(arr[i] >= arr[j]){
						tmp = arr[j];
						arr[j] = arr[i];
						arr[i] = tmp;
					}
				}
			}
			console.log(arr); //[0, 1, 1, 2, 2, 3, 3]


			/* 5、字符串 - 英文短句转换
			将任意一段英文文本转换为Camel命名法形式。
			如："I am a student"，转换后为：iAmAStudent。
			"get element by id"，转换后为：getElementById。 */
			/* var str = 'I am a student';
			var arr = str.split(" ");
			console.log(arr);*/ 
			//console.log(arr);
			/* for (var i = 1; i < arr.length; i++) {
				//arr[i] = arr[i].slice(0, 1).toUpperCase()+arr[i].slice(1);
				arr[i]=arr[i].charAt(0).toUpperCase()+arr[i].substring(1); 
			} */
			// var arr = str.replace(/\s*/g,""); 
		/* 	str1 = arr.join('');
			console.log(str1);  */
			//IAmAStudent   首字母不是小写 
			var str = 'I am a student';
			function camel(str){
				var arr=str.split(" ");
				//console.log("arr:",arr);
				var s="";
				for(var i=0,len=arr.length;i<len;i++){
					if(i==0){
						s+=fn1(arr[0]);
					}else{
						s+=fn2(arr[i]);
					}
				}
				return s;
			}
			function fn1(str){
				return str.toLowerCase();
			}
			function fn2(str){
				return str.slice(0,1).toUpperCase()+str.slice(1).toLowerCase();
			}
			console.log(camel(str));
			
		</script>
	</body>
</html>
